표현식은 사용자가 원하는 작업 내용을 컴퓨터가 받아들여 수행할 수 있도록 하는 단위명령들의 조합.
> 25+15*5
> Y=C+I+G+(X-M)
> season <- c("spring", "smummer", "fail", "winter")
25*3/13
## [1] 5.769
print(25*3/13, digits=10)
## [1] 5.769230769
x <- c(1,2,3,4,5,6,7,8,9,10)
x
## [1] 1 2 3 4 5 6 7 8 9 10
assign("x", c(1,2,3,4,5,6,7,8,9,10))
x
## [1] 1 2 3 4 5 6 7 8 9 10
c("USA", "Japan", "UK", "France", "Germany", "Italy", "Canada") -> G7
G7
## [1] "USA" "Japan" "UK" "France" "Germany" "Italy" "Canada"
assign("G7", c("USA", "Japan", "UK", "France", "Germany", "Italy", "Canada"))
G7
## [1] "USA" "Japan" "UK" "France" "Germany" "Italy" "Canada"
> a b <- c(1,2,3,4,5) # 잘못된 식별문자
> 1a <- c(1,2,3,4,5)
> _a <- c(1,2,3,4,5)
> .1 <- c(1,2,3,4,5)
A <- c(1,2,3,4,5)
A
## [1] 1 2 3 4 5
25+15*5
## [1] 100
A; 25+15*5
## [1] 1 2 3 4 5
## [1] 100
# 이 문장은 실행되지 않는다. 2+5
print(2+5) # 2+5의 결과를 출력한다.
## [1] 7
# nominal National Disposable Income
# 통계청으로부터 수집된 2001년부터 2010년까지 우리나라의 연도별 명목 국민총처분가능소득(단위 : 십억 원) 관측값이다.
nominal.NDI <- c(649420, 719019, 764327, 826544, 861886, 906278, 973520, 1033947, 1069156, 1169392)
# Consumer Price Index
# 같은 기간의 우리나라 소비자 물가 지수(2010=100) 관측값이다.
CPI <- c(76.08, 78.18, 80.92, 83.83, 86.14, 88.07, 90.30, 94.52, 97.13, 100)
# real National Disposable Income
# 실질 국민총처분가능호득은 명목 국민총처분가능호득을 소비자 물가지수로 나눈 값에 100을 곱하여 계산할 수 있다.
rNDI = (nominal.NDI / CPI) * 100
rNDI # print rNDI
## [1] 853601 919697 944546 985976 1000564 1029043 1078095 1093892
## [9] 1100747 1169392
> cor(x, y, use, method=c("pearson", "kendall", "spearman"))
> ts(data, start, end, frequency, delta, ts.eps, class, names)
rNDI # 예제 2-10의 rNDK 객체 출력
## [1] 853601 919697 944546 985976 1000564 1029043 1078095 1093892
## [9] 1100747 1169392
rNDI[4] # 네 번째 원소 추출
## [1] 985976
rNDI[10] # 열 번째 원소 추출
## [1] 1169392
mat <- matrix(c(1,2,3,4), ncol=2) # 2x2 행렬 생성 후 mat에 할당
mat # 생성된 행렬의 내용 출력
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
mat[1,1] # 1행 1열의 원소 추출
## [1] 1
mat[2,1] # 2행 1열의 원소 추출
## [1] 2
mode(5+4)
## [1] "numeric"
mode(5>4)
## [1] "logical"
mode(2+5i)
## [1] "complex"
mode("economy")
## [1] "character"
A <- c(TRUE, FALSE, T, F, T, F)
as.numeric(A)
## [1] 1 0 1 0 1 0
as.character(A)
## [1] "TRUE" "FALSE" "TRUE" "FALSE" "TRUE" "FALSE"
as.complex(A)
## [1] 1+0i 0+0i 1+0i 0+0i 1+0i 0+0i
B <- c(1,1,1,0,0,0)
as.logical(B)
## [1] TRUE TRUE TRUE FALSE FALSE FALSE
as.integer(pi)
## [1] 3
x <- c(1,2,3,NA,5)
y <- c(2,4,6,8,10)
x+y
## [1] 3 6 9 NA 15
0/0
## [1] NaN
Inf/1
## [1] Inf
c()
## NULL
x[2] <- NaN
is.na(x)
## [1] FALSE TRUE FALSE TRUE FALSE
is.nan(x)
## [1] FALSE TRUE FALSE FALSE FALSE
1:5
## [1] 1 2 3 4 5
length(c(1:5))
## [1] 5
G7
## [1] "USA" "Japan" "UK" "France" "Germany" "Italy" "Canada"
length(G7)
## [1] 7
my.mat <- matrix(1:4, nrow=2)
my.mat
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
mode(my.mat)
## [1] "numeric"
class(my.mat)
## [1] "matrix"
x <- c(1,2,3,4)
x
## [1] 1 2 3 4
assign("y", c(1,2,3,4))
y
## [1] 1 2 3 4
-5:10
## [1] -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
100:50
## [1] 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84
## [18] 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67
## [35] 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50
seq(from=1, to=10, by=0.5)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5
## [15] 8.0 8.5 9.0 9.5 10.0
seq(to=5)
## [1] 1 2 3 4 5
seq(to=10,length.out=15)
## [1] -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
seq(1,2,length.out=10)
## [1] 1.000 1.111 1.222 1.333 1.444 1.556 1.667 1.778 1.889 2.000
rep(c(1,2,3), times=3)
## [1] 1 2 3 1 2 3 1 2 3
rep(1:5,each=2)
## [1] 1 1 2 2 3 3 4 4 5 5
rep(G7, each=3, times=2)
## [1] "USA" "USA" "USA" "Japan" "Japan" "Japan" "UK"
## [8] "UK" "UK" "France" "France" "France" "Germany" "Germany"
## [15] "Germany" "Italy" "Italy" "Italy" "Canada" "Canada" "Canada"
## [22] "USA" "USA" "USA" "Japan" "Japan" "Japan" "UK"
## [29] "UK" "UK" "France" "France" "France" "Germany" "Germany"
## [36] "Germany" "Italy" "Italy" "Italy" "Canada" "Canada" "Canada"
CPI
## [1] 76.08 78.18 80.92 83.83 86.14 88.07 90.30 94.52 97.13 100.00
CPI[c(3,5,10)]
## [1] 80.92 86.14 100.00
CPI[-c(1,2,3,4,5)]
## [1] 88.07 90.30 94.52 97.13 100.00
CPI5Y <- CPI[6:10]
CPI5Y
## [1] 88.07 90.30 94.52 97.13 100.00
CPI[CPI>90]
## [1] 90.30 94.52 97.13 100.00
CPI>=90
## [1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
sum(CPI>=90)
## [1] 4
CPItmp <- CPI
CPItmp
## [1] 76.08 78.18 80.92 83.83 86.14 88.07 90.30 94.52 97.13 100.00
CPItmp[2] <- NA
CPItmp
## [1] 76.08 NA 80.92 83.83 86.14 88.07 90.30 94.52 97.13 100.00
CPItmp[c(3,5,10)] <- c(80,85,90)
CPItmp
## [1] 76.08 NA 80.00 83.83 85.00 88.07 90.30 94.52 97.13 90.00
CPItmp[!is.na(CPItmp)] -> new.CPI
new.CPI
## [1] 76.08 80.00 83.83 85.00 88.07 90.30 94.52 97.13 90.00
rm(CPItmp)
G7
## [1] "USA" "Japan" "UK" "France" "Germany" "Italy" "Canada"
G8 <- append(G7, "Russia")
G8
## [1] "USA" "Japan" "UK" "France" "Germany" "Italy" "Canada"
## [8] "Russia"
G20 <- append(G8, c("Korea", "China", "Australia", "India", "Brazil", "Mexico", "Indonesia", "Argentina", "Turkey", "Saudi Arabia", "South Africa", "EU"), after=1) # 12개의 원소를 G8의 첫 번째 원소 뒤에 입력
G20
## [1] "USA" "Korea" "China" "Australia"
## [5] "India" "Brazil" "Mexico" "Indonesia"
## [9] "Argentina" "Turkey" "Saudi Arabia" "South Africa"
## [13] "EU" "Japan" "UK" "France"
## [17] "Germany" "Italy" "Canada" "Russia"
GDP.rate <- c(5.2, 5.1, 2.3, 0.3, 6.2, 3.6) # 경제성장률 자료 입력
GDP.rate
## [1] 5.2 5.1 2.3 0.3 6.2 3.6
names(GDP.rate) <- c(2005:2010) # 원소 이름 입력
GDP.rate[c("2009","2010")] # 할당된 이름으로 원소 추출
## 2009 2010
## 6.2 3.6
# 2006년부터 2011년까지 우리나라의 연도별 실업률 자료 입력
Unem.rate <- c(3.5, 3.2, 3.2, 3.6, 3.7, 3.4)
Unem.rate
## [1] 3.5 3.2 3.2 3.6 3.7 3.4
names(Unem.rate) <- paste(2005:2010, "y", sep="")
Unem.rate
## 2005y 2006y 2007y 2008y 2009y 2010y
## 3.5 3.2 3.2 3.6 3.7 3.4
# 상경대학 학생 30명을 임의로 선택, 이들이 졸업 후 어떤 직장에 취직하였는지를 설문조사하여 job이라는 객체에 할당.
# 직업군 할당 - 공무원(1), 회사원(2), 교사(3), 은행원(4), 회계사(5)
job <- c(1, 1, 4, 5, 1, 4, 5, 5, 1, 3, 2, 5, 1, 2, 4, 2, 1, 5, 3, 4, 4, 5, 1, 3, 5, 1, 4, 4, 5, 4)
job
## [1] 1 1 4 5 1 4 5 5 1 3 2 5 1 2 4 2 1 5 3 4 4 5 1 3 5 1 4 4 5 4
job.f <- factor(job, levels=c(1,2,3,4,5), labels=c("Gov", "Co.staff", "Teacher", "Banker", "Acc"))
job.f
## [1] Gov Gov Banker Acc Gov Banker Acc
## [8] Acc Gov Teacher Co.staff Acc Gov Co.staff
## [15] Banker Co.staff Gov Acc Teacher Banker Banker
## [22] Acc Gov Teacher Acc Gov Banker Banker
## [29] Acc Banker
## Levels: Gov Co.staff Teacher Banker Acc
levels(job.f)
## [1] "Gov" "Co.staff" "Teacher" "Banker" "Acc"
# 직종별 임금 수준을 함께 조사하고 기초적 통계량을 얻어야 하는 경우,
# 설문 대상자의 직종이 입력된 자료와 임금이 입력된 자료를 결합하고
# 평균이나 표준 편차와 같은 함수를 이용하여 통계량을 얻어야 한다.
# 1) 설문대상자 30명의 월별 임금을 순서대로 입력
incomes <- c(285, 270, 290, 310, 299, 305, 410, 380, 300, 280, 250, 520, 390, 355, 440, 371, 510, 630, 290, 410, 340, 395, 445, 300, 570, 500, 280, 354, 640, 550)
incomes
## [1] 285 270 290 310 299 305 410 380 300 280 250 520 390 355 440 371 510
## [18] 630 290 410 340 395 445 300 570 500 280 354 640 550
# 2) 대상이 되는 incomes 객체를 인자1, 개별 임금 관측값의 지표가 되는 job.f를 인자 2입력, 평균 통계량 함수 인자3으로 넣어줌.
# 직종별 월 임금의 평균 통계량이 계산된다.
incmean <- tapply(incomes, job.f, mean)
incmean
## Gov Co.staff Teacher Banker Acc
## 374.9 325.3 290.0 371.1 481.9
# 3) 직종별 월 임금의 표준편차 구하기.
incsd <- tapply(incomes, job.f, sd)
incsd
## Gov Co.staff Teacher Banker Acc
## 99.64 65.73 10.00 91.63 124.67
# 직장의 종류와 임금 수준에 대한 조사와 더불어, 이들 30명의 직장 만족도 조사
# 만족의 정도 - 낮음(1), 보통(2), 높음(3)
ans.satis <- c(3, 2, 2, 1, 1, 1, 3, 3, 3, 2, 2, 2, 1, 1, 1, 3, 3, 2, 3, 1, 2, 3, 2, 1, 1, 3, 3, 3, 1, 2)
ans.satis
## [1] 3 2 2 1 1 1 3 3 3 2 2 2 1 1 1 3 3 2 3 1 2 3 2 1 1 3 3 3 1 2
ans.satisf <- factor(ans.satis, levels=c(1,2,3), labels=c("low", "middle", "high"), ordered=T)
ans.satisf
## [1] high middle middle low low low high high high middle
## [11] middle middle low low low high high middle high low
## [21] middle high middle low low high high high low middle
## Levels: low < middle < high
ans.satisor <- ordered(ans.satis, level=c(1,2,3), label=c("low", "middle", "high"))
ans.satisor
## [1] high middle middle low low low high high high middle
## [11] middle middle low low low high high middle high low
## [21] middle high middle low low high high high low middle
## Levels: low < middle < high
names(ans.satisor) <- paste("person", 1:30, paste="")
ans.satisor
## person 1 person 2 person 3 person 4 person 5 person 6
## high middle middle low low low
## person 7 person 8 person 9 person 10 person 11 person 12
## high high high middle middle middle
## person 13 person 14 person 15 person 16 person 17 person 18
## low low low high high middle
## person 19 person 20 person 21 person 22 person 23 person 24
## high low middle high middle low
## person 25 person 26 person 27 person 28 person 29 person 30
## low high high high low middle
## Levels: low < middle < high
matrix(c(1,2,3,4))
## [,1]
## [1,] 1
## [2,] 2
## [3,] 3
## [4,] 4
matrix(c(1,2,3,4), ncol=2)
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
matrix(1:9, nrow=3, byrow=T)
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
matdata <- c(1,2,3,4)
matrix(matdata, ncol=2, dimnames=list(c("row1", "row2"), c("col1", "col2")))
## col1 col2
## row1 1 3
## row2 2 4
# 부분시장 균형 모형이 다음과 같다고 하자
# Q_d = Q_s
# Q_d = 10 - 2P
# Q_s = -5 + 3P
# 이때 3개의 변수를 Q_d, Q_s, P의 순서대로 배열한다면
# Q_d - Q_s = 0 ----------- (1식)
# Q_d + 2P = 10 ----------- (2식)
# Q_s - 3P = - 5 ------------(3식)
# 따라서 위 모형의 계수행렬은 rbind() 함수를 사용하여 생성할 수 있다.
row1 <- c(1,-1,0)
row2 <- c(1,0,2)
row3 <- c(0,1,-3)
coef.mat <- rbind(row1, row2, row3)
coef.mat
## [,1] [,2] [,3]
## row1 1 -1 0
## row2 1 0 2
## row3 0 1 -3
col1 <- c(1, 1, 0)
col2 <- c(-1, 0, 1)
col3 <- c(0, 2, -3)
coef.mat1 <- cbind(col1, col2, col3)
coef.mat1
## col1 col2 col3
## [1,] 1 -1 0
## [2,] 1 0 2
## [3,] 0 1 -3
coef.mat[3,3]
## row3
## -3
coef.mat[3,]
## [1] 0 1 -3
coef.mat[1:2,]
## [,1] [,2] [,3]
## row1 1 -1 0
## row2 1 0 2
coef.mat[-2,]
## [,1] [,2] [,3]
## row1 1 -1 0
## row3 0 1 -3
coef.mat[c("row1", "row3"),]
## [,1] [,2] [,3]
## row1 1 -1 0
## row3 0 1 -3
coef.mat[,c(T,T,F)]
## [,1] [,2]
## row1 1 -1
## row2 1 0
## row3 0 1
coef.mat[coef.mat==1]
## [1] 1 1 1
coef.mat==1
## [,1] [,2] [,3]
## row1 TRUE FALSE FALSE
## row2 TRUE FALSE FALSE
## row3 FALSE TRUE FALSE
coef.mat -> mat.tmp
mat.tmp[,3] <- 5
mat.tmp
## [,1] [,2] [,3]
## row1 1 -1 5
## row2 1 0 5
## row3 0 1 5
mat.tmp[mat.tmp==1] <- 0
mat.tmp
## [,1] [,2] [,3]
## row1 0 -1 5
## row2 0 0 5
## row3 0 0 5
cbind(mat.tmp, 1:3)
## [,1] [,2] [,3] [,4]
## row1 0 -1 5 1
## row2 0 0 5 2
## row3 0 0 5 3
rbind(mat.tmp,1)
## [,1] [,2] [,3]
## row1 0 -1 5
## row2 0 0 5
## row3 0 0 5
## 1 1 1
rbind(mat.tmp[1,], c(2,4,6), mat.tmp[2:3,])
## [,1] [,2] [,3]
## 0 -1 5
## 2 4 6
## row2 0 0 5
## row3 0 0 5
A <- matrix(1:36,nrow=6)
A
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 7 13 19 25 31
## [2,] 2 8 14 20 26 32
## [3,] 3 9 15 21 27 33
## [4,] 4 10 16 22 28 34
## [5,] 5 11 17 23 29 35
## [6,] 6 12 18 24 30 36
i.mat <- matrix(c(2,3,4,1,4,4,5,6),ncol=2, byrow=T)
i.mat
## [,1] [,2]
## [1,] 2 3
## [2,] 4 1
## [3,] 4 4
## [4,] 5 6
dimnames(i.mat) <- list(c("index1", "index2", "index3", "index4"), c("row","col"))
i.mat
## row col
## index1 2 3
## index2 4 1
## index3 4 4
## index4 5 6
A[i.mat]
## [1] 14 4 22 35
A[i.mat] <- c(3,4,6,8)
A
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 7 13 19 25 31
## [2,] 2 8 3 20 26 32
## [3,] 3 9 15 21 27 33
## [4,] 4 10 16 6 28 34
## [5,] 5 11 17 23 29 8
## [6,] 6 12 18 24 30 36
arr <- array(1:18, dim=c(3,3,2), dimnames=list(c("KOR","CHI","JAP"), c("GDP.R", "USD.R", "Cuur.Acc"), c("2011Y", "2012Y")))
arr
## , , 2011Y
##
## GDP.R USD.R Cuur.Acc
## KOR 1 4 7
## CHI 2 5 8
## JAP 3 6 9
##
## , , 2012Y
##
## GDP.R USD.R Cuur.Acc
## KOR 10 13 16
## CHI 11 14 17
## JAP 12 15 18
arr1 <- 1:18
dim(arr1) <-c(3,3,2)
dimnames(arr1) <- list(c("KOR","CHI","JAP"), c("GDP.R", "USD.R", "Cuur.Acc"), c("2011Y", "2012Y"))
arr1
## , , 2011Y
##
## GDP.R USD.R Cuur.Acc
## KOR 1 4 7
## CHI 2 5 8
## JAP 3 6 9
##
## , , 2012Y
##
## GDP.R USD.R Cuur.Acc
## KOR 10 13 16
## CHI 11 14 17
## JAP 12 15 18
arr1==arr
## , , 2011Y
##
## GDP.R USD.R Cuur.Acc
## KOR TRUE TRUE TRUE
## CHI TRUE TRUE TRUE
## JAP TRUE TRUE TRUE
##
## , , 2012Y
##
## GDP.R USD.R Cuur.Acc
## KOR TRUE TRUE TRUE
## CHI TRUE TRUE TRUE
## JAP TRUE TRUE TRUE
arr
## , , 2011Y
##
## GDP.R USD.R Cuur.Acc
## KOR 1 4 7
## CHI 2 5 8
## JAP 3 6 9
##
## , , 2012Y
##
## GDP.R USD.R Cuur.Acc
## KOR 10 13 16
## CHI 11 14 17
## JAP 12 15 18
arr[1,,]
## 2011Y 2012Y
## GDP.R 1 10
## USD.R 4 13
## Cuur.Acc 7 16
arr[,-2,] # 마이너스 지표는, 삭제를 의미
## , , 2011Y
##
## GDP.R Cuur.Acc
## KOR 1 7
## CHI 2 8
## JAP 3 9
##
## , , 2012Y
##
## GDP.R Cuur.Acc
## KOR 10 16
## CHI 11 17
## JAP 12 18
arr[,,2]
## GDP.R USD.R Cuur.Acc
## KOR 10 13 16
## CHI 11 14 17
## JAP 12 15 18
arr[,,"2012Y"]
## GDP.R USD.R Cuur.Acc
## KOR 10 13 16
## CHI 11 14 17
## JAP 12 15 18
arr[c(T,T,F),,2]
## GDP.R USD.R Cuur.Acc
## KOR 10 13 16
## CHI 11 14 17
arr -> arr.tmp
arr.tmp
## , , 2011Y
##
## GDP.R USD.R Cuur.Acc
## KOR 1 4 7
## CHI 2 5 8
## JAP 3 6 9
##
## , , 2012Y
##
## GDP.R USD.R Cuur.Acc
## KOR 10 13 16
## CHI 11 14 17
## JAP 12 15 18
arr.tmp[,,1] <- c(5,6,4)
arr.tmp
## , , 2011Y
##
## GDP.R USD.R Cuur.Acc
## KOR 5 5 5
## CHI 6 6 6
## JAP 4 4 4
##
## , , 2012Y
##
## GDP.R USD.R Cuur.Acc
## KOR 10 13 16
## CHI 11 14 17
## JAP 12 15 18
arr.tmp[,1,2] <- NA
arr.tmp
## , , 2011Y
##
## GDP.R USD.R Cuur.Acc
## KOR 5 5 5
## CHI 6 6 6
## JAP 4 4 4
##
## , , 2012Y
##
## GDP.R USD.R Cuur.Acc
## KOR NA 13 16
## CHI NA 14 17
## JAP NA 15 18
arr.tmp[is.na(arr.tmp)] <- c(8,5,2)
arr.tmp
## , , 2011Y
##
## GDP.R USD.R Cuur.Acc
## KOR 5 5 5
## CHI 6 6 6
## JAP 4 4 4
##
## , , 2012Y
##
## GDP.R USD.R Cuur.Acc
## KOR 8 13 16
## CHI 5 14 17
## JAP 2 15 18
# 1) 한국은행에서 수집한 분기별 대미환율(2010.1/4~2012.1/4, 단위 : 원) 자료
ex.rate <- c(1144, 1166, 1585, 1134, 1120, 1084, 1084, 1145, 1131)
ex.rate
## [1] 1144 1166 1585 1134 1120 1084 1084 1145 1131
# 2) 분기별 경상수지(2010.1/4~2012.1/4, 단위 : 백만 달러) 자료
blc.ca <- c(68, 10735, 10122, 8469, 2610, 5492, 6896, 11507, 2631)
blc.ca
## [1] 68 10735 10122 8469 2610 5492 6896 11507 2631
# 3) 위 자료들을 하나의 묶어 list로 할당
trade.kor <- list(country="Korea", KRW.USD=ex.rate, balance=blc.ca)
trade.kor
## $country
## [1] "Korea"
##
## $KRW.USD
## [1] 1144 1166 1585 1134 1120 1084 1084 1145 1131
##
## $balance
## [1] 68 10735 10122 8469 2610 5492 6896 11507 2631
mode(trade.kor)
## [1] "list"
attributes(trade.kor)
## $names
## [1] "country" "KRW.USD" "balance"
length(trade.kor)
## [1] 3
# 성분 추출은 [[]] 사용
# 성분에 포함된 원소 추출은 []
trade.kor[[1]]
## [1] "Korea"
trade.kor[[2]]
## [1] 1144 1166 1585 1134 1120 1084 1084 1145 1131
trade.kor[[3]][2]
## [1] 10735
trade.kor$country
## [1] "Korea"
trade.kor$balance[2]
## [1] 10735
trade.kor$KRW.USD[c(2,3,6)]
## [1] 1166 1585 1084
# 네 번째 성분으로, 같은 시기의 분기별 경제성장률(2010.1/4~2012.1/4, 단위 : %) 추가해보자
GDP.growth <- c(2.1, 1.4, 0.6, 0.5, 1.3, 0.9, 0.8, 0.3, 0.9)
trade.tmp <- trade.kor
trade.tmp
## $country
## [1] "Korea"
##
## $KRW.USD
## [1] 1144 1166 1585 1134 1120 1084 1084 1145 1131
##
## $balance
## [1] 68 10735 10122 8469 2610 5492 6896 11507 2631
trade.tmp[4] <- GDP.growth
## Warning: number of items to replace is not a multiple of replacement
## length
names(trade.tmp)[[4]] <- "GDP.growth.rate"
trade.tmp
## $country
## [1] "Korea"
##
## $KRW.USD
## [1] 1144 1166 1585 1134 1120 1084 1084 1145 1131
##
## $balance
## [1] 68 10735 10122 8469 2610 5492 6896 11507 2631
##
## $GDP.growth.rate
## [1] 2.1
trade.tmp$GDP.growth.rate
## [1] 2.1
trade.tmp$GDP.growth.rate <- NULL
trade.tmp
## $country
## [1] "Korea"
##
## $KRW.USD
## [1] 1144 1166 1585 1134 1120 1084 1084 1145 1131
##
## $balance
## [1] 68 10735 10122 8469 2610 5492 6896 11507 2631
# 대미환율(ex.rate), 경상수지(blc.ca), 경제성장률(GDP.growth) 자료 사용
# 대미환율
str(ex.rate)
## num [1:9] 1144 1166 1585 1134 1120 ...
# 경상수지
str(blc.ca)
## num [1:9] 68 10735 10122 8469 2610 ...
# 경제성장률
str(GDP.growth)
## num [1:9] 2.1 1.4 0.6 0.5 1.3 0.9 0.8 0.3 0.9
# 데이터 프레임 구성
trade.df <- data.frame(ex.rate, blc.ca, GDP.growth, row.names=c(paste(rep(2010:2012, each=4, length.out=9), paste(1:4, 4, sep="/"), sep=".")))
# 속성 확인
attributes(trade.df)
## $names
## [1] "ex.rate" "blc.ca" "GDP.growth"
##
## $row.names
## [1] "2010.1/4" "2010.2/4" "2010.3/4" "2010.4/4" "2011.1/4" "2011.2/4"
## [7] "2011.3/4" "2011.4/4" "2012.1/4"
##
## $class
## [1] "data.frame"
# 길이 확인
length(trade.df)
## [1] 3
# 구조 요약확인
str(trade.df)
## 'data.frame': 9 obs. of 3 variables:
## $ ex.rate : num 1144 1166 1585 1134 1120 ...
## $ blc.ca : num 68 10735 10122 8469 2610 ...
## $ GDP.growth: num 2.1 1.4 0.6 0.5 1.3 0.9 0.8 0.3 0.9
# 앞에 몇 개 데이터만 보기
head(trade.df)
## ex.rate blc.ca GDP.growth
## 2010.1/4 1144 68 2.1
## 2010.2/4 1166 10735 1.4
## 2010.3/4 1585 10122 0.6
## 2010.4/4 1134 8469 0.5
## 2011.1/4 1120 2610 1.3
## 2011.2/4 1084 5492 0.9
# 데이터 요약통계 보기
summary(trade.df)
## ex.rate blc.ca GDP.growth
## Min. :1084 Min. : 68 Min. :0.300
## 1st Qu.:1120 1st Qu.: 2631 1st Qu.:0.600
## Median :1134 Median : 6896 Median :0.900
## Mean :1177 Mean : 6503 Mean :0.978
## 3rd Qu.:1145 3rd Qu.:10122 3rd Qu.:1.300
## Max. :1585 Max. :11507 Max. :2.100
head(trade.df)
## ex.rate blc.ca GDP.growth
## 2010.1/4 1144 68 2.1
## 2010.2/4 1166 10735 1.4
## 2010.3/4 1585 10122 0.6
## 2010.4/4 1134 8469 0.5
## 2011.1/4 1120 2610 1.3
## 2011.2/4 1084 5492 0.9
# 1행 전체, 즉 2010년 1/4분기의 대미환율, 경상수지, 경제성장률 관측값 추출
trade.df[1,]
## ex.rate blc.ca GDP.growth
## 2010.1/4 1144 68 2.1
# 세 번째 변수의 1행과 5행, 9행의 원소 - 즉 2010, 2011, 2012년도 1/4분기의 경제성장률 관측값 추출
trade.df[c(1,5,9), 3]
## [1] 2.1 1.3 0.9
# 첫 번째 변수와 세 번째 변수, 즉 대미환율 변수와 경제성장률 변수 전체를 추출
trade.df[,c(T,F,T)]
## ex.rate GDP.growth
## 2010.1/4 1144 2.1
## 2010.2/4 1166 1.4
## 2010.3/4 1585 0.6
## 2010.4/4 1134 0.5
## 2011.1/4 1120 1.3
## 2011.2/4 1084 0.9
## 2011.3/4 1084 0.8
## 2011.4/4 1145 0.3
## 2012.1/4 1131 0.9
# 세 번째 변수인 경제성장률 변수를 추출
# 데이터 프레임도 리스트이므로, 성분 추출 연산자 [[]] 적용
trade.df[[3]]
## [1] 2.1 1.4 0.6 0.5 1.3 0.9 0.8 0.3 0.9
# 첫번째 변수의 첫 번째 원소, 즉 2010년 1/4분기의 대미환율 관측값 추출
trade.df[[1]][1]
## [1] 1144
# 세 번째 변수의 관측값들 중에서 1 이상의 값을 가지는 행을 추출 -> 경제성장률이 1% 이상인 분기를 학인
trade.df[trade.df[[3]]>=1,]
## ex.rate blc.ca GDP.growth
## 2010.1/4 1144 68 2.1
## 2010.2/4 1166 10735 1.4
## 2011.1/4 1120 2610 1.3
# 성분추출 연산자 $
trade.df$ex.rate
## [1] 1144 1166 1585 1134 1120 1084 1084 1145 1131
trade.df$GDP.growth[c(1,2,9)]
## [1] 2.1 1.4 0.9
trade.df[trade.df$blc.ca>=10000,2]
## [1] 10735 10122 11507
# 5명 학생 데이터 - 이름, 나이, 성별, 전공 변수로 구성.
student <- data.frame(name=letters[1:5], age=c(22,23,21,20,25), sex=c("m", "m", "f", "f", "f"), major=c("eco", "math", "eng", "eco", "art"), stringsAsFactors=F)
student
## name age sex major
## 1 a 22 m eco
## 2 b 23 m math
## 3 c 21 f eng
## 4 d 20 f eco
## 5 e 25 f art
search()
## [1] ".GlobalEnv" "package:knitr" "package:stats"
## [4] "package:graphics" "package:grDevices" "package:utils"
## [7] "package:datasets" "package:methods" "Autoloads"
## [10] "package:base"
attach(student)
search()
## [1] ".GlobalEnv" "student" "package:knitr"
## [4] "package:stats" "package:graphics" "package:grDevices"
## [7] "package:utils" "package:datasets" "package:methods"
## [10] "Autoloads" "package:base"
ls(2)
## [1] "age" "major" "name" "sex"
sdt.tmp <- student
sdt.tmp
## name age sex major
## 1 a 22 m eco
## 2 b 23 m math
## 3 c 21 f eng
## 4 d 20 f eco
## 5 e 25 f art
major
## [1] "eco" "math" "eng" "eco" "art"
major[c(3,4)] <- c("jab", "acc")
sdt.tmp[,4] <- major
sdt.tmp
## name age sex major
## 1 a 22 m eco
## 2 b 23 m math
## 3 c 21 f jab
## 4 d 20 f acc
## 5 e 25 f art
detach(student)
search()
## [1] ".GlobalEnv" "package:knitr" "package:stats"
## [4] "package:graphics" "package:grDevices" "package:utils"
## [7] "package:datasets" "package:methods" "Autoloads"
## [10] "package:base"
종적 자료(longitudinal data) - 변수들을 여러 개체별로 시간의 순서에 따라 여러 시점에 걸쳐 얻은 자료.
패널 자료(panel data) - 종적 자료 중 개체별로 관측 시점이 모두 동일하게 구성된 경우.
## 단순 시계열
# 1) 데이터 생성
ts.data <- 1:12
ts.data
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
# 2) 분기별 시계열 생성
ts1 <- ts(ts.data, start=2010, frequency=4)
ts1
## Qtr1 Qtr2 Qtr3 Qtr4
## 2010 1 2 3 4
## 2011 5 6 7 8
## 2012 9 10 11 12
# 3) 월별 시계열 생성
ts2 <- ts(ts.data, start=2010, frequency=12)
ts2
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2010 1 2 3 4 5 6 7 8 9 10 11 12
## 다중 시계열
# 1) 데이터 행렬 생성
mts.dat <- matrix(1:12, ncol=2)
mts.dat
## [,1] [,2]
## [1,] 1 7
## [2,] 2 8
## [3,] 3 9
## [4,] 4 10
## [5,] 5 11
## [6,] 6 12
# 2) 연결 시계열 생성
mts <- ts(mts.dat, end=2012, frequency=1)
mts
## Time Series:
## Start = 2007
## End = 2012
## Frequency = 1
## Series 1 Series 2
## 2007 1 7
## 2008 2 8
## 2009 3 9
## 2010 4 10
## 2011 5 11
## 2012 6 12
# 1) 차원에 이름 부여
dimnames(mts) <- list(NULL, c("KOSDAQ", "KOSPI"))
mts
## Time Series:
## Start = 2007
## End = 2012
## Frequency = 1
## KOSDAQ KOSPI
## 2007 1 7
## 2008 2 8
## 2009 3 9
## 2010 4 10
## 2011 5 11
## 2012 6 12
# 2) 3행의 원소 추출
mts[3,]
## KOSDAQ KOSPI
## 3 9
# 3) 3행 2열의 원소 추출
mts[3,2]
## KOSPI
## 9
# 4) 논리값으로 원소 추출
mts[c(T,F,T,F,T,F),]
## KOSDAQ KOSPI
## [1,] 1 7
## [2,] 3 9
## [3,] 5 11
# 5) 시계열의 시작, 종료, 주기를 반환
tsp(mts)
## [1] 2007 2012 1
# 1) 개체 이름 벡터 생성
name <- rep(c("Kim", "Lee", "Choi"), each=3)
name
## [1] "Kim" "Kim" "Kim" "Lee" "Lee" "Lee" "Choi" "Choi" "Choi"
# 2) 연도 벡터 생성
year <- rep(2011:2013, times=3)
year
## [1] 2011 2012 2013 2011 2012 2013 2011 2012 2013
# 3) BMI 벡터 생성
BMI <- c(22,24,25,26,25,22,23,22,19)
BMI
## [1] 22 24 25 26 25 22 23 22 19
# 4) 혈압 벡터 생성
B.press <- c(116, 115, 110, 124, 121, 120, 138, 129, 121)
B.press
## [1] 116 115 110 124 121 120 138 129 121
# 5) 혈당수치 벡터 생성
B.sugar <- c(69, 77, 73, 92, 90, 97, 88, 83, 83)
B.sugar
## [1] 69 77 73 92 90 97 88 83 83
# 6) 패널 자료 생성
health.panel <- data.frame(name, year, BMI, B.press, B.sugar)
health.panel
## name year BMI B.press B.sugar
## 1 Kim 2011 22 116 69
## 2 Kim 2012 24 115 77
## 3 Kim 2013 25 110 73
## 4 Lee 2011 26 124 92
## 5 Lee 2012 25 121 90
## 6 Lee 2013 22 120 97
## 7 Choi 2011 23 138 88
## 8 Choi 2012 22 129 83
## 9 Choi 2013 19 121 83
# 1) 2011년 데이터 프레임
h.df1 <- data.frame(name=c("Kim", "Lee", "Choi"), year=c(2011, 2011, 2011), BMI=c(22, 26, 23), B.press=c(116, 124, 138), B.sugar=c(69, 92, 88))
h.df1
## name year BMI B.press B.sugar
## 1 Kim 2011 22 116 69
## 2 Lee 2011 26 124 92
## 3 Choi 2011 23 138 88
# 2) 2012년 데이터 프레임
h.df2 <- data.frame(name=c("Kim", "Lee", "Choi"), year=c(2012, 2012, 2012), BMI=c(24, 25, 22), B.press=c(115, 121, 129), B.sugar=c(77, 90, 83))
h.df2
## name year BMI B.press B.sugar
## 1 Kim 2012 24 115 77
## 2 Lee 2012 25 121 90
## 3 Choi 2012 22 129 83
# 3) 2013년 데이터 프레임
h.df3 <- data.frame(name=c("Kim", "Lee", "Choi"), year=c(2013, 2013, 2013), BMI=c(25, 22, 19), B.press=c(110, 120, 121), B.sugar=c(73, 97, 83))
h.df3
## name year BMI B.press B.sugar
## 1 Kim 2013 25 110 73
## 2 Lee 2013 22 120 97
## 3 Choi 2013 19 121 83
# 4) 3개의 데이터 프레임을 결합
h.df.total <- rbind(h.df1, h.df2, h.df3)
h.df.total
## name year BMI B.press B.sugar
## 1 Kim 2011 22 116 69
## 2 Lee 2011 26 124 92
## 3 Choi 2011 23 138 88
## 4 Kim 2012 24 115 77
## 5 Lee 2012 25 121 90
## 6 Choi 2012 22 129 83
## 7 Kim 2013 25 110 73
## 8 Lee 2013 22 120 97
## 9 Choi 2013 19 121 83
# 6) plm 패키지 로딩
library(plm)
## Loading required package: Formula
# 7) 패널 자료로 변환
health.panel1 <- pdata.frame(h.df.total, index=c("name", "year"))
health.panel1
## name year BMI B.press B.sugar
## Choi-2011 Choi 2011 23 138 88
## Choi-2012 Choi 2012 22 129 83
## Choi-2013 Choi 2013 19 121 83
## Kim-2011 Kim 2011 22 116 69
## Kim-2012 Kim 2012 24 115 77
## Kim-2013 Kim 2013 25 110 73
## Lee-2011 Lee 2011 26 124 92
## Lee-2012 Lee 2012 25 121 90
## Lee-2013 Lee 2013 22 120 97
# 문자형 자료 예제 - 데이터 전체 불러오기
scan(file="./data/input.sample.txt", what="")
## [1] "KIM" "LEE" "CHOI" "PARK" "MIN" "WHANG" "JUNG" "YOO"
## [9] "KANG" "AHN"
# 첫 번째 행의 자료 선택
scan(file="./data/input.sample.txt", what="", nline=1)
## [1] "KIM" "LEE" "CHOI" "PARK" "MIN"
# 첫 번째 행의 자료 제외
scan(file="./data/input.sample.txt", what="", skip=1)
## [1] "WHANG" "JUNG" "YOO" "KANG" "AHN"
# 수치형 자료 예제 - 데이터 전체 불러오기
scan(file="./data/input.sample0.txt", what="")
## [1] "23" "12" "5" "7" "8" "30" "12" "17" "42" "33" "35" "24" "22" "15"
## [15] "10" "45" "66" "52" "13" "47"
# 3행과 4행의 데이터를 불러온 후 5x2 행렬 생성
text.mat <- matrix(scan(file="./data/input.sample0.txt", skip=2), nrow=5, dimnames=list(1:5, c("X", "Y")))
text.mat
## X Y
## 1 35 45
## 2 24 66
## 3 22 52
## 4 15 13
## 5 10 47
# 한국은행 경제통계시스템(ecos.bok.or.kr)에서 수집한
# 2011년 1월부터 2012년 1월까지의
# 월별 코스피(KOSPI)지수와 코스닥(KOSDAQ) 지수 자료
# 파일 경로를 입력하여 데이터 전체 불러오기
read.table(file="./data/input.sample1.txt")
## V1 V2 V3
## 1 DATE KOSPI KOSDAQ
## 2 2011/01 2091.61 528.60
## 3 2011/02 2002.87 517.58
## 4 2011/03 2002.67 510.59
## 5 2011/04 2153.13 528.44
## 6 2011/05 2121.87 494.71
## 7 2011/06 2074.64 469.03
## 8 2011/07 2150.06 511.55
## 9 2011/08 1869.41 488.16
## 10 2011/09 1790.95 461.47
## 11 2011/10 1825.88 471.45
## 12 2011/11 1858.80 497.85
## 13 2011/12 1863.23 501.07
## 14 2012/01 1891.01 516.72
# 첫 줄 변수이름 사용 옵션
sample1 <- read.table(file="./data/input.sample1.txt", header=T)
str(sample1)
## 'data.frame': 13 obs. of 3 variables:
## $ DATE : Factor w/ 13 levels "2011/01","2011/02",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ KOSPI : num 2092 2003 2003 2153 2122 ...
## $ KOSDAQ: num 529 518 511 528 495 ...
head(sample1)
## DATE KOSPI KOSDAQ
## 1 2011/01 2092 528.6
## 2 2011/02 2003 517.6
## 3 2011/03 2003 510.6
## 4 2011/04 2153 528.4
## 5 2011/05 2122 494.7
## 6 2011/06 2075 469.0
sample1$KOSPI
## [1] 2092 2003 2003 2153 2122 2075 2150 1869 1791 1826 1859 1863 1891
sample1$KOSDAQ
## [1] 528.6 517.6 510.6 528.4 494.7 469.0 511.6 488.2 461.5 471.4 497.9
## [12] 501.1 516.7
# 첫 줄 변수이름 사용 옵션, 첫 번째 열을 행 이름으로 사용
sample1 <- read.table(file="./data/input.sample1.txt", header=T, row.names=1)
str(sample1)
## 'data.frame': 13 obs. of 2 variables:
## $ KOSPI : num 2092 2003 2003 2153 2122 ...
## $ KOSDAQ: num 529 518 511 528 495 ...
head(sample1)
## KOSPI KOSDAQ
## 2011/01 2092 528.6
## 2011/02 2003 517.6
## 2011/03 2003 510.6
## 2011/04 2153 528.4
## 2011/05 2122 494.7
## 2011/06 2075 469.0
sample1$KOSPI
## [1] 2092 2003 2003 2153 2122 2075 2150 1869 1791 1826 1859 1863 1891
sample1$KOSDAQ
## [1] 528.6 517.6 510.6 528.4 494.7 469.0 511.6 488.2 461.5 471.4 497.9
## [12] 501.1 516.7
# 수치형과 문자형이 혼합되어 있으며
# 결측값 NA가 포함되어 있고
# 각 데이터가 쉼표로 구분되어 있는 경우
# 계량경제학을 수강하는 학생 7명의 이름과 성별, 나이, 중간시험 성적 데이터가 입력된 자료
sample2 <- read.table(file="./data/input.sample2.txt", # 파일 로드
sep=",", row.name=paste("p", 1:7, sep="."), # 구분기호, 행 이름 입력
col.names=c("name", "sex", "age", "score"), # 열(변수) 이름 입력
stringsAsFactors=F) # 범주자료 자동 변환 제한
str(sample2)
## 'data.frame': 7 obs. of 4 variables:
## $ name : chr "KIM" "LEE" "CHOI" "PARK" ...
## $ sex : chr "M" "F" "F" "M" ...
## $ age : int 24 21 22 23 NA 20 22
## $ score: int 100 95 80 88 92 85 86
sample2
## name sex age score
## p.1 KIM M 24 100
## p.2 LEE F 21 95
## p.3 CHOI F 22 80
## p.4 PARK M 23 88
## p.5 HONG F NA 92
## p.6 JIN M 20 85
## p.7 KANG F 22 86
sum(sample2$age)
## [1] NA
sample2$name
## [1] "KIM" "LEE" "CHOI" "PARK" "HONG" "JIN" "KANG"
sample2$sex
## [1] "M" "F" "F" "M" "F" "M" "F"
# 벡터 생성
x <- c(10, 13, 56, 66, 74, 12, 41, 74, 85, 61)
# 파일 생성 및 연결
sink(file="./out/output.sample.txt")
# 평균값 저장
mean(x)
## [1] 49.2
# 표준편차 값 저장
sd(x)
## [1] 28.44
# 요약통계량 저장
summary(x)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.0 20.0 58.5 49.2 72.0 85.0
# 연결 종료
sink()
# 이미 생성된 파일에 추가로 결과물 저장
# 첨부모드로 연결, 콘솔 출력 옵션 선택
sink(file="./out/output.sample.txt", append=T, split=T)
# 벡터 출력, 저장
x
## [1] 10 13 56 66 74 12 41 74 85 61
# 새로운 벡터 생성, 출력, 저장
(y<-1:10)
## [1] 1 2 3 4 5 6 7 8 9 10
# 공분산 결과 출력, 저장
cov(x,y)
## [1] 50.89
# 상관계수 출력, 저장
cor(x,y)
## [1] 0.5911
# 연결종료
sink()
# 난수 생성
ts <- round(rnorm(30, 100, 10))
# 원소 이름 입력
names(ts) <- paste(1982:2011, "Y")
# 객체 ts의 데이터를 "output.sample0.txt"에 저장
cat(ts, file="./out/output.sample0.txt",
sep=".", # 구분기호는 마침표.
fill=T) #텍스트 파일의 활성창(window) 크기에 맞춰서 자동으로 줄 바꿈
# sample1을 "output.sample1.txt"에 저장하기
write.table(sample1, file="./out/output.sample1.txt", row.names=F)
# sample2를 "output.sample2.txt"에 저장하기
write.table(sample2, file="./out/output.sample2.txt")